import json
import time

from langchain_core.messages import HumanMessage, AIMessage
import sys
import os
from typing import TypedDict, Optional, List


# 将项目根目录添加到系统路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
from app.utils.logger_util import logger, node_logger, Logger, UserLogger, user_logger


# 定义状态结构
class State(TypedDict):
    thread_id: Optional[str]
    name: Optional[str]
    age: Optional[str]
    messages: List[HumanMessage | AIMessage]
    next: Optional[str]  # 流程控制字段
    user_initial_input: Optional[str]  # 存储初始用户输入

# 使用示例
@node_logger
def process_node(initial_state,b):
    time.sleep(3)
    a=1+2
    logger.info("这是开发人员自己打印的日志:计算的值是"+str(a))

#不带注解的，则不会进行函数调用、参数以及函数用时的打印
def normal_function():  # 这个函数不会被添加日志
    logger.info("这是一个普通函数")

# 测试
#我需要江苏省移动用户2024年1-3月的通话时长数据，按日统计，增量抽取，1小时内更新，用于用户行为分析
if __name__ == "__main__":
    human_msg = HumanMessage(content="你好，我想咨询问题")
    ai_msg = AIMessage(content="您好！请问有什么可以帮您？")
    initial_state: State = {
    # 必传字段：messages（List[HumanMessage | AIMessage]）
        "messages": [human_msg, ai_msg],
        # 可选字段：按需赋值，未赋值则默认 None（因 total=False）
        "thread_id":"001",
        "name": "张三",
        "age": "25",
        "next": "question_analysis",  # 示例：下一个流程节点
        "user_initial_input": "你好，我想咨询问题"  # 存储初始输入
    }
    process_node(initial_state,"test")
    normal_function()

    import json

    # 定义一个字典
    my_dict = {
        "name": "张三",
        "age": 30,
        "is_student": False,
        "hobbies": ["阅读", "运动", "编程"]
    }

    json_str = json.dumps(my_dict, ensure_ascii=False)


    #测试使用logger，以用户thread_id为前缀，每个用户生成一个日志文件

